/* 
 * CollectionUtil.java
 * 
 * Data de criação: 02/04/2010
 * 
 * CORPORATIVO - MTE. 
 *
 */
package br.com.o2solutions.util.collection;

import java.util.Collection;
import java.util.Iterator;

import org.springframework.util.CollectionUtils;

/**
 * Classe responsável realizar operações úteis sobre coleções. Toda a
 * implementacao usa a api da Apache (http://www.apache.org/) e Spring
 * (http://www.springsource.org/).
 * 
 * @author osvaldeir
 * @since 28/03/2010
 * 
 */
public class CollectionUtil {

	/**
	 * Retona true caso a coleção seja igual a <code>null</code> ou seu
	 * {@link Collection#size()} seja igual a zero.
	 * 
	 * @param collection
	 *            Coleção a ser verificada quanto ao composição de objetos.
	 * @return boolean false caso a coleção tenha, no mínimo, um elemento.
	 */
	public static boolean isEmpty(Collection<?> collection) {
		return CollectionUtils.isEmpty(collection);
	}

	/**
	 * Retorna o primeiro elemento da coleção. Caso a coleção não tenha o
	 * elemento ou seja igual a <code>null</code> e retornado null. A ordenação
	 * vai depender do tipo de coleção a ser verificada.
	 * 
	 * @param <T>
	 *            Tipo dos objetos pertencentes a coleção.
	 * @param collection
	 *            Coleção a ser percorrida para a captura do objeto.
	 * @return T Objeto contido na primeira posição da coleção.
	 */
	public static <T> T getFirstObject(Collection<T> collection) {
		T result = null;
		if (!isEmpty(collection)) {
			result = collection.iterator().next();
		}
		return result;
	}

	/**
	 * Retorna o último elemento da coleção. Caso a coleção não tenha o elemento
	 * ou seja igual a <code>null</code> e retornado null. A ordenação vai
	 * depender do tipo de coleção a ser verificada.
	 * 
	 * @param <T>
	 *            Tipo dos objetos pertencentes a coleção.
	 * @param collection
	 *            Coleção a ser percorrida para a captura do objeto.
	 * @return T Objeto contido na última posição da coleção.
	 */
	public static <T> T getLastObject(Collection<T> collection) {
		T result = null;
		if (!isEmpty(collection)) {
			Iterator<T> it = collection.iterator();
			while (it.hasNext()) {
				result = it.next();
			}
		}
		return result;
	}

}
